package es.qb.deportivos.il.dal.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;

import org.springframework.orm.jpa.JpaCallback;

import es.qb.deportivos.il.dal.interfaces.PartidoDAO;
import es.qb.deportivos.il.domain.Partido;
import es.qb.deportivos.il.domain.PartidoCustom;

public class PartidoDAOImpl extends GeneralDAOImpl<Partido> implements PartidoDAO {

	@SuppressWarnings("unchecked")
	public List<PartidoCustom> obtenerPartidosCustom(Integer jugador) {
		List<PartidoCustom> listaPartidos = new ArrayList<PartidoCustom>();

		List<?> lista = new ArrayList<String>();
		String consulta = "select part.partido_id, part.fecha, eq.goles from partidos part, (select eq.equipo_id, jugequip.goles from equipos eq, jugadores_equipo jugequip where eq.equipo_id = jugequip.equipo_id and jugequip.jugador_id ="
				+ jugador + ") eq where part.equipo_1_id = eq.equipo_id or part.equipo_2_id = eq.equipo_id";

		lista = findUsingSql(consulta);

		for (Object object : lista) {
			Object o[] = (Object[]) object;
			PartidoCustom partido = new PartidoCustom();

			if (o[0] != null) {
				partido.setIdPartido(new Long(o[0].toString()));
			}

			if (o[1] != null) {
				partido.setFechaPartido((Date) o[1]);
			}

			if (o[2] != null) {
				partido.setGoles(new Long(o[2].toString()));
			}

			listaPartidos.add(partido);

		}

		return listaPartidos;

	}

	public int obtenerResultadoJug(Integer jugador, Integer resultado) {

		List<?> lista = new ArrayList<String>();
		String consulta = "select eq.resultado from equipos eq, jugadores_equipo jugequip where eq.equipo_id = jugequip.equipo_id and jugequip.jugador_id ="
				+ jugador + " and eq.resultado =" + resultado;

		lista = findUsingSql(consulta);

		return lista.size();

	}

	public List<?> findUsingSql(final String sql) {
		return getJpaTemplate().executeFind(new JpaCallback<Object>() {
			public Object doInJpa(EntityManager entityManager) throws PersistenceException {
				return entityManager.createNativeQuery(sql).getResultList();
			}
		});
	}
}
